﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SistemaCenterQuimPost.UI.PostAdministrador
{
    public partial class frmVentasPeriodo : SistemaCenterQuimPost.Plantillas.frmPlantillaHijo
    {
        //-----------ATRIBUTOS----------------------
        
        DataSet2 centerQuimDs;
        DataSet2TableAdapters.VentasTableAdapter ventaTa;
        DataSet2TableAdapters.ProductosxVentaTableAdapter productosxVentaTa;


        //------------CONSTRUCTORES-------------------
        public frmVentasPeriodo()
        {
            InitializeComponent();
            centerQuimDs = new DataSet2();
            ventaTa = new DataSet2TableAdapters.VentasTableAdapter();
            productosxVentaTa = new DataSet2TableAdapters.ProductosxVentaTableAdapter();
        }

        //------------ESTADOS----------------------------

        private void frmVentasPeriodo_Load(object sender, EventArgs e)
        {
            lblError.Visible = false; //al ser un formulario sin estado, se setea este atributo acá
        }

        //--------------METODOS VARIOS---------------------

        private void btnBusVentas_Click(object sender, EventArgs e)
        {
            buscarVentasPeriodo();
           
        }

         
        private void buscarVentasPeriodo()
        {
            try
            {

                if (cboTurno.Text == "") //si no disrimina por turno
                {
                    if (cboFormaPago.Text == "")
                    {
                        ventaTa.FillByEntreFechas(centerQuimDs.Ventas, DateTime.Parse(dtpFechaDesde.Value.ToShortDateString()), dtpFechaHasta.Value);
                    }
                    else
                    {
                        ventaTa.FillByEntreFechaxTipo(centerQuimDs.Ventas, DateTime.Parse(dtpFechaDesde.Value.ToShortDateString()), dtpFechaHasta.Value, cboFormaPago.Text);
                    }
                }
                else //si discrimina por turno
                {
                    if (cboFormaPago.Text == "")
                    {
                        ventaTa.FillByEntreFechasxTurno(centerQuimDs.Ventas, DateTime.Parse(dtpFechaDesde.Value.ToShortDateString()), dtpFechaHasta.Value, cboTurno.Text.Substring(0, 1));
                    }
                    else
                    {
                        ventaTa.FillByEntreFechaxTipoyTurno(centerQuimDs.Ventas, DateTime.Parse(dtpFechaDesde.Value.ToShortDateString()), dtpFechaHasta.Value, cboTurno.Text, cboFormaPago.Text);
                    }
                }

                //verificamos si arroja resultados
                if (centerQuimDs.Ventas.Rows.Count > 0)
                {
                    cargarGrilla();
                    calcularTotales();
                }
                else
                {
                    MessageBox.Show("No existen ventas para el turno y/o fecha especificada", "VENTAS DEL PERIODO", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    limpiarDatos();
                }

            }

            catch (Exception ex)
            {
                //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        private void cargarGrilla()
        {
            limpiarDatos();
            DateTime resgFecha; //reguardo de fecha
            int i; //controla el termino del dataTable
            double acumuladorVenta; //acumula totales de Ventas de cada fecha
            double acumuladorCosto; //acumula totales de Cosoto de cada fecha
            acumuladorVenta = centerQuimDs .Ventas [0].totalGeneral;//primer importe de venta
            acumuladorCosto = centerQuimDs .Ventas [0].costoGeneral ; //primer importe de costo de venta
            resgFecha = centerQuimDs.Ventas[0].fechaVenta.Date; //primera fecha de la venta
                        i = 1;//pasamos al siguiente registro

            while ( (i < centerQuimDs .Ventas .Rows .Count )) //este while se ejecutara hasta el ultimo registro
            {
                if (centerQuimDs .Ventas [i].fechaVenta.Date  == resgFecha ) //pregunta por el final del archivo
                {
                    //acumula ventas y costos
                    acumuladorVenta += centerQuimDs.Ventas[i].totalGeneral;
                    acumuladorCosto += centerQuimDs.Ventas[i].costoGeneral;
                }
                else
                {
                    //si se produzco un cambio de fecha
                    //vuelca resultados
                    dgvVentas.Rows.Add(resgFecha.ToString().Substring (0,10), acumuladorVenta .ToString (),acumuladorCosto .ToString (),(acumuladorVenta -acumuladorCosto ).ToString ());
                    
                    //produce un nuevo resgurado
                    resgFecha = centerQuimDs.Ventas[i].fechaVenta.Date ;
                    
                    //inicializa acumuladores
                    acumuladorVenta = centerQuimDs.Ventas[i].totalGeneral;//primer importe de venta
                    acumuladorCosto = centerQuimDs.Ventas[i].costoGeneral; //primer importe de costo de venta
                }

                i++; //incrementa variable
            }

            if (i == centerQuimDs .Ventas .Rows .Count ) //si ya llego al final del datatable debemos registrar la ultima fecha
            {
                //vuelca resultados
                dgvVentas.Rows.Add(resgFecha.ToString().Substring (0,10), acumuladorVenta.ToString(), acumuladorCosto.ToString(), (acumuladorVenta - acumuladorCosto).ToString());
            }
        }

        private void calcularTotales()
        {
            double totalVenta = 0; //inicializamos acumuladores
            double totalCosto = 0; //inicializamos acumuladores
            double totalSaldo = 0; //inicializamos acumuladores
           
            //recorremos la grilla
            foreach (DataGridViewRow row in dgvVentas .Rows )
            {
                totalVenta += Convert.ToDouble(row.Cells[1].Value);
                totalCosto += Convert.ToDouble(row.Cells[2].Value);
                totalSaldo += Convert.ToDouble(row.Cells[3].Value);
            }

            lblTotalCostoValor.Text = totalCosto.ToString();
            lblTotalSaldoValor.Text = totalSaldo.ToString();
            lblTotalVentaValor.Text = totalVenta.ToString();
        }

        private void limpiarDatos()
        {
            lblTotalSaldoValor.Text = "0";
            lblTotalVentaValor.Text = "0";
            lblTotalCostoValor.Text = "0";
            dgvVentas.Rows.Clear();
        }

    }
}
